package meta

import (
	"gitee.com/DonHz/cloud-file-storage/db"
)

// 文件元信息结构
type FileMeta struct {
	FileSha1 string
	FileName string
	FileSize int64
	Location string
	UploadAt string
	UpdateAt string
}

// 存储所有的文件元信息, k-v: filesha1-fileMeta
var fileMetas map[string]FileMeta

func init() {
	fileMetas = make(map[string]FileMeta)
}

// 新增/更新文件的元信息
func UpdateFileMeta(fMeta FileMeta) {
	fileMetas[fMeta.FileSha1] = fMeta
}

// 新增/更新文件的元信息到Mysql中
func UpdateFileMetaDB(fMeta FileMeta) bool {
	fileMetas[fMeta.FileSha1] = fMeta
	return db.OnFileUploadFinished(fMeta.FileSha1, fMeta.FileName, fMeta.FileSize, fMeta.Location)
}

// 获取文件的元信息
func GetFileMeta(fileSha1 string) FileMeta {
	return fileMetas[fileSha1]
}

func GetFileMetaDB(fileSha1 string) (FileMeta, error) {
	tfile, err := db.GetFileMeta(fileSha1)
	if err != nil {
		return FileMeta{}, err
	}
	fileMeta := FileMeta{
		FileSha1: tfile.FileHash,
		FileName: tfile.FileName.String,
		FileSize: tfile.FileSize.Int64,
		Location: tfile.FileAddr.String,
		UploadAt: tfile.CreateAt.Format("2006-01-02 15:04:05"),
		UpdateAt: tfile.UpdateAt.Format("2006-01-02 15:04:05"),
	}
	return fileMeta, nil
}

// 删除，需要加锁
func RemoveFileMeta(fileSha1 string) {
	delete(fileMetas, fileSha1)
}
